"""
自己发挥想象力，制作一个剪刀石头布的游戏
要求：在命令行玩帅就可以了，无需考虑GUI界面
思路：
首先用户需要在剪刀、石头，布这三个对象之间任选一个对象输入，用来与机器人生成的随机对象相互比较，最后输出结果。
改进：可以加入当游戏输掉时，询问用户是否要再次挑战的机制
分解：
1.用户输入：input
2.电脑随机选择：百度查询可以采用 random.choice()  示例：numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] print(random.choice(numbers))  # 随机选择一个数字
3.比较结果：if elif else
4.输出结果：print
5.可以加入异常处理 try except以防止用户输入错误导致程序直接停止运行的情况发生
"""

import random #加入random模块，随机数，在这个基础上选择 random.choice()让电脑随机选择list中的值

computer = ["剪刀","石头","布"] #一个命名为 computer的列表，里面有剪刀、石头、布，这三个对象

def play_game(): #能力之外，询问AI给出的改正方法，即定义一个函数play_game()，里面包含游戏逻辑
    while True:
        try:
            player_choice =  input("请输入剪刀石头布：")
            if player_choice  in computer:  #判断用户输入的值是否在computer列表中
                break #如果用户输入的值在computer列表中，则跳出循环
            else:  #如果用户输入的值不在computer列表中，则继续循环
                print("输入错误，请在剪刀、石头、布这三个里面输入任意一个。") #
        except ValueError: #如果用户输入的值不在computer列表中，则抛出异常
            print("输入无效，请正确输入有效信息。")
    print(f"您选择的出招是：{player_choice}") #最后输出显示确认用户输入的值

    computer_choice = random.choice(computer)
    print(f"电脑选择出招是：{computer_choice}")
    if player_choice == computer_choice:
        print("你们的最终结果是平局！")
    elif (player_choice == "剪刀" and computer_choice == "布") or (player_choice == "石头" and computer_choice == "剪刀") or (player_choice == "布" and computer_choice == "石头"):
        print("恭喜你，你赢了！")
    else:
        print("就这？就这？就这？！")
"""
到了以上步骤是我能力范围内的，我想到了是否可以在游戏输掉后，重新询问用户要不要重新再来一次的功能需求，以下代码是我问的AI。
为了确保在用户选择重新开始时，整个游戏重新运行，而不仅仅是重复询问是否重新开始，我们需要将整个游戏逻辑放到一个函数中，
并且在需要重新开始时调用这个函数。这样每次重新开始时，游戏会从头开始执行。
加入改动地方思路：
1.将游戏逻辑放入一个函数中，例如play_game()。
2.main()函数： 在每一轮游戏结束后，询问用户是否重新开始，并根据用户的选择决定是否重新调用play_game()函数，或者退出程序。
3.如果用户选择重新开始，则调用play_game()函数重新开始游戏。
"""
def main():  #
    while True:
        play_game()
        while True:
             restart = input("还要再玩一把吗？(y/n): ").lower()
             if restart == 'y':
                 break  # 重新开始游戏
             elif restart == 'n':
                print("感谢你的游戏！再见！")
                exit()  # 退出游戏
                # return()     #AI给出的是return()，我改成exit()也可以，AI给出的解释是return可以返回一个值给main()，而exit()是直接推出整个程序
             else:
                print("输入无效，请输入 y 或 n。")
main()
